<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

/**
 * 新闻模型类
 * @author wb_wenjie.wuwj
 * @version 1.0.1 2013-1-15
 */
class News_m extends MY_Model
{
	function __construct()
	{
		parent::__construct();
		
		// 加载上传设置参数
		$this->config->load('upload');
	}
	
	/**
	 * 获取新闻信息，与新闻内容，新闻图片表联合查询，主要用于新闻编辑
	 * @param array $where 查询条件
	 * @param string $order 排序
	 * @param string $limit 查询条数
	 * @return boolean|array
	 */
	function get_news($where, $order = 'ID DESC', $limit = '1')
	{
		$this->db->select("news.*,column.fatherid,column.columnname,news_content.content,news_content.keyword,news_picture.picturepath");
		$this->db->from('news');
		$this->db->join('column', 'column.id=news.classid', 'LEFT');
		$this->db->join('news_content', 'news_content.newsid=news.id', 'LEFT');
		$this->db->join('news_picture', 'news_picture.newsid=news.id', 'LEFT');
		$this->db->where($where);
		$this->db->order_by($order);
		$this->db->limit($limit);
		$query = $this->db->get();
		return $query->result_array();
	}
	
	/**
	 * 查询新闻状态，只返回新闻的状态属性
	 * @param array $where 查询条件
	 * @param string $limit 查询条数
	 * @return boolean|array
	 */
	function get_news_state($where, $limit = '1')
	{
		return $this->get_state('news', $where, $limit);
	}
	
	/**
	 * 获得新闻的总数
	 * @access public
	 */
	function get_news_count()
	{
		return $this->count_all('news');
	}
	
	/**
	 * 根据指定id删除新闻,及新闻图片
	 * 
	 * 删除的新闻id可以是以id为索引的一维数组，也可以是$array['id'][]形式的二维数组
	 * @param array $news_id 删除的条件数组
	 */
	function delete_news($news_id)
	{
		if (is_array($news_id))
		{
			foreach ($news_id as $key => $values)
			{
				if (is_array($values))
				{
					foreach ($values as $value)
					{
						$this->delete_news_picture($value);
						
						// 新闻内容表，和新闻图片表一周删除
						$this->db->delete(array('news_content', 'news_picture'), array('newsid' => $value));
						$this->db->delete('news', array($key => $value)); 
					}
				}
				else
				{
					$this->delete_news_picture($news_id);
					$this->db->delete(array('news_content', 'news_picture'), array('newsid' => $values));
					$this->db->delete('news', $news_id); 
				}
			}
			return TRUE;
		}
		else
		{
			return FALSE;
		}
	}
	
	/**
	 * 根据新闻id删除新闻图片表记录
	 * @param int|array $news_id 新闻id
	 * @param boolean $delete_image 是否删除此对应的图片
	 * @return boolean
	 */
	function delete_picture_by_newsid($news_id, $delete_image = FALSE)
	{
		if (is_array($news_id))
		{
			foreach ($news_id as $value)
			{
				if ($delete_image)
				{
					$this->delete_news_picture($value);
				}
				$this->delete_record('news_picture', array('newsid' => $value));
			}
			
		}
		else
		{
			if ($delete_image)
			{
				$this->delete_news_picture($news_id);
			}
			$this->delete_record('news_picture', array('newsid' => $news_id));
		}
		return TRUE;
		
	}
	
	/**
	 * 查询相应条件下新闻图片表中的数量，返回整数，没有返回0
	 * @param array $where 查询条件
	 * @return boolean
	 */
	function picture_count($where)
	{
		return $this->count_all_results('news_picture', $where);
	}
	
	/**
	 * 根据条件删除新闻内容表
	 * @param array $content_id
	 * @return boolean
	 */
	private function delete_news_content($content_id)
	{
		$this->delete_record('news_content', $content_id); 
	}
	
	/**
	 * 根据新闻id删除新闻图片
	 * @param int $news_id 新闻id
	 */
	function delete_news_picture($news_id)
	{
		// @TODO 批量删除图片
		$news_id = (int)$news_id;
		$result = $this->get_news_picture('*', array('newsid'=>$news_id));
		if (!empty($result))
		{
			foreach ($result as $news)
			{
				// 根据设置的网站上传目录，组合成图片绝对路径
				$pic_path = dirname(BASEPATH) . '/' . $this->config->item('upload_path') . $news ['picturepath'];
				if (TRUE == file_exists($pic_path))
				{
					unlink($pic_path);
				}
				else
				{
					return FALSE;
				}
			}
		}
	}
	
	/**
	 * 查询图片新闻的图片信息，返回查询结果，不存在返回FALSE
	 * @param string $select 查询内容
	 * @param array $where 查询条件
	 * @return boolean|array
	 */
	function get_news_picture($select = '*', $where)
	{
		$this->db->select($select);
		$this->db->where($where);
		$query = $this->db->get('news_picture');
		return $query->result_array();
	}
	
	/**
	 * 根据条件查找新闻，返回新闻数组
	 * @param array $where 查询条件，以字段名为索引的数组条件
	 * @param string $order 排序方式
	 * @return boolean 失败返回FALSE
	 */
	function show_news($limit, $order = 'id desc')
	{
		$this->db->select("news.*,column.fatherid,column.columnname");
		$this->db->from('news');
		$this->db->join('column', 'column.id=news.classid', 'LEFT');
		$this->db->order_by($order);
		$this->db->limit($limit['limit_end'], $limit['limit_from']);
		$query = $this->db->get();
		
		return $query->result_array();
	}
	
	/**
	 * 更新新闻
	 * @param array $where 更新条件
	 * @param array $data 更新内容
	 * @return boolean
	 */
	function update_news($where, $data)
	{
		return $this->update('news', $where, $data);
	}
	
	/**
	 * 更新新闻内容表
	 * @param array $where
	 * @param array $data
	 * @return boolean
	 */
	function update_news_content($where, $data)
	{
		return $this->update('news_content', $where, $data);
	}
	
	/**
	 * 更新闻图片表
	 * @param array $where
	 * @param array $data
	 * @return boolean
	 */
	function update_news_picture($where, $data)
	{
		return $this->update('news_picture', $where, $data);
	}
	
	/**
	 * 插入新闻，和对应的新闻内容，新闻图片内容可选
	 * @param array $news 新闻信息
	 * @param array $content 新闻内容
	 * @param array $pictrue 新闻图片
	 * @return boolean
	 */
	function insert_news($news, $content, $pictrue = array())
	{
		if (!empty($news) && is_array($news))
		{
			$result = $this->db->insert('news', $news);
			$news_id = $this->db->insert_id();
			if (!$news_id)
			{
				return FALSE;
			}
			else
			{
				// 添加相应的新闻内容
				if (is_array($content) && !empty($content))
				{
					$content['newsid'] = $news_id;
					$this->insert_news_content($content);
				}
				
				// 添加相应的新闻图片
				if (is_array($pictrue) && !empty($pictrue))
				{
					$pictrue['newsid'] = $news_id;
					$this->insert_news_picture($pictrue);
				}
				return TRUE;				
			}
		}
		else
		{
			return FALSE;
		}
	}
	
	/**
	 * 添加新闻内容
	 * @param array $content
	 * @return boolean
	 */
	function insert_news_content($content)
	{
		return $this->insert('news_content', $content);
	}
	
	/**
	 * 添加新闻图片内容
	 * @param array $picture
	 * @return boolean
	 */
	function insert_news_picture($picture)
	{
		// @TODO 处理新闻ID存在的问题
		return $this->insert('news_picture', $picture);
	}
}

/* End of file news_m.php */
/* Location: ./application/controllers/news_m.php */